//-------------------------服务器(后端)接收请求
//后端一定先去执行中间件，再去执行写的接口

//-------1.导入第三方包express
var express = require("express")
//-------2.创建web应用
var app = express()
//-------3.中间件===创建静态资源服务器(托管静态资源)
//app.use()注册中间件
//express.static() express内置的一个静态资源托管的中间件
app.use(express.static('static'))


//定义返回给客户端的数据
var arr = [
    { email: '178884773@qq.com', name: '张伟', phone: '13611129070', pass: '1234', ingroup: '编辑组', isadmin: true, status: true },
    { email: '178884773@qq.com', name: '李煜', phone: '13611129070', pass: '1234', ingroup: '编辑组', isadmin: true, status: true },
    { email: '178884773@qq.com', name: '李清照', phone: '13611129070', pass: '1234', ingroup: '编辑组', isadmin: true, status: false }
]
//在所有接口前设置 处理post请求参数的中间件
app.use(express.json())
app.use(express.urlencoded({ extended: false }))

//-------4.创建api接口服务器
//设置接口

//get
app.get('/user/list', (req, res) => {
    //req 请求对象，包含了和本次请求相关的所有信息(请求地址，请求方式，携带的参数)
    //res 响应对象，可以借助res向客户端返回信息(字符串，json格式数据，网页)

    console.log('收到了来自客户端的请求 get');
    console.log(req.query);
    //获取get类型请求的参数: req.query
    var { page, count } = req.query//解构
    console.log(page, count);




    //分页的逻辑
    var newarr = arr.slice((page - 1) * count, page * count)  //page，count是get/post里携带的参数






    //返回数据
    res.send({ code: 200, msg: '请求成功', list: newarr })//返回结果给客户端

})

//模糊搜索
app.get('/user/search', (req, res) => {
    //接收参数
    var { searchkey } = req.query
    //根据参数从用户的name属性中过滤
    var newarr = arr.filter((item) => {
        //indexOf（）返回的是下标，没找到返回-1
        // return item.name.indexOf(searchkey)!=-1
        //include（）返回的是true/false
        // return item.name.includes(searchkey)
        return new RegExp(searchkey).test(item.name)//正则写法
    })
    //返回数据
    res.send({ code: 200, msg: '查询成功', list: newarr })

})

//登录
//post
//要想在服务器端接收到前端发送的post请求所携带的参数，
//那么后端必须提前在所有接口前设置 处理post请求参数的中间件，
//app.use(express.json())
//app.use(express.urlencoded())
//这两个中间件会帮你去处理post请求并且把post请求携带的参数解析出来放到body当中，
//这样后端收到请求之后的body里边才有数据，否则没有数据
app.post('/user/login', (req, res) => {
    console.log('收到了来自客户端的请求 post');
    // console.log(req.body);
    //获取post类型请求的参数: req.body
    var { phone, pass } = req.body;//解构

    // console.log(phone, pass);
    //用来自客户端的数据做判断，判断是否在服务端用户列表中
    // console.log(arr);
    var i = arr.findIndex((item, index) => {
        console.log('开始');
        console.log(phone, pass);
        console.log(item.phone, item.pass);

        console.log('-----------------------');
        return item.phone == phone && item.pass == pass;
    })
    //如果i不是-1，说明来自客户端的数据是合法的
    if (i != -1) {
        //登录成功时可以一并返回登陆成功的的用户信息以及登录令牌
        res.send({ code: 200, msg: '登录成功', userinfo: arr[i], token: '' })//token:''用户登录成功的令牌
    } else {
        res.send({ code: 400, msg: '登录失败' })
    }
    // res.send({ code: 200, msg: '登录成功' })
    // res.send({ code: 400, msg: '登录失败' })
})


//5.设置监听
app.listen(8090, () => {
    console.log('服务端运行在:http://localhost:8090');
})
